package cn.flying.cloud.base.dubbo.configuration;

import org.apache.dubbo.config.ConsumerConfig;
import org.apache.dubbo.config.ProviderConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * dubbo 配置
 *
 * @author: admin
 * @date: 2024年05月30日 09:14
 * @version: 1.0
 */
@Configuration
public class DubboConfiguration {

    @Value("${spring.cloud.nacos.discovery.metadata.env-id:default}")
    private String envId;

    /**
     * dubbo 消费者配置
     *
     * @return
     */
    @Bean
    public ConsumerConfig consumerConfig() {
        // 创建ConsumerConfig实例并设置超时时间
        ConsumerConfig consumerConfig = new ConsumerConfig();
        // 设置超时时间为1分钟，单位为毫秒
        consumerConfig.setTimeout(1 * 60 * 1000);
        // 设置自定义扩展的过滤器
        consumerConfig.setFilter("header");
        // Dubbo 消费者会在启动时检查服务提供者是否可用，这通常被称为“check”机制。
        // 如果设置为true（默认值），那么消费者在启动时会检查对应的提供者是否存在，如果不存在，则消费者启动失败；
        // 如果设置为false，则不会进行这样的检查，即使没有找到提供者，消费者也会正常启动
        consumerConfig.setCheck(false);

        // dev环境才生效
        if ("dev".equals(envId)) {
            consumerConfig.setLoadbalance("custom");
        }
        return consumerConfig;
    }

    /**
     * dubbo 生产者配置
     *
     * @return
     */
    @Bean
    public ProviderConfig providerConfig() {
        ProviderConfig providerConfig = new ProviderConfig();
        // 设置自定义扩展的过滤器
        providerConfig.setFilter("header");
        return providerConfig;
    }
}
